import Vue from 'vue'

// 配置vuex
import Vuex from 'vuex'
Vue.use(Vuex)

var car = window.JSON.parse(localStorage.getItem('cart') || '[]');

const store = new Vuex.Store({
    state: {
        // 购物车中，每个商品的id和数量count构成一个对象{id:89,count:2}
        cart: car,
    },
    mutations: {
        btnAddToCart(state, goods) {
            var findflag = false;
            // 添加到购物车的时候，如果购物车里原来有，就只更新数量
            state.cart.some(item => {
                if (item.id == goods.id) {
                    item.count += goods.count;
                    findflag = true;
                    return true;
                }
            });
            // 如果购物车里没有就push进去
            if (!findflag) state.cart.push(goods);
            console.log(state.cart);

            // 为了持久化存储，存到localStorage中
            localStorage.setItem('cart', window.JSON.stringify(state.cart));
        },
        // 根据数量框的当前值更新cart的count
        updateCount: function(state, goods) {
            state.cart.some(item => {
                if (item.id == goods.id) {
                    item.count = goods.count;
                    return true;
                }
            })
            localStorage.setItem('cart', window.JSON.stringify(state.cart));
        },
        // 删除功能，删除cart中指定id的数据
        delFromCart: function(state, id) {
            console.log(state.cart);
            state.cart.some((item, i) => {
                if (item.id == id) {
                    state.cart.splice(i, 1);
                    console.log('ok');
                    return true;
                }
            })
            localStorage.setItem('cart', window.JSON.stringify(state.cart));

        },
        // 根据滑动开关的情况，更新cart的selected属性，并重新保存到localstorage
        updateSelected: function(state, obj) {
            state.cart.some(item => {
                if (item.id == obj.id) {
                    item.selected = obj.selected;
                    return true;
                }
            })
            localStorage.setItem('cart', window.JSON.stringify(state.cart));
        }
    },
    getters: {
        // 获取购物车信息中各商品的数量
        total: function(state) {
            let c = 0;
            state.cart.forEach(item => {
                c += item.count;
            })
            return c;
        },
        // 把加入购物车的商品id拼成字符串，用于CartContainer.vue
        idstr: function(state) {
            let idarr = [];
            state.cart.forEach(item => {
                idarr.push(item.id)
            })
            return idarr.toString();
        },
        // 把cart包装成对象，键为id，值为count,，用于CartContainer.vue初始化数量框
        countObj: function(state) {
            var obj = {};
            state.cart.forEach(item => {
                obj[item.id] = item.count;
            })
            return obj;
        },
        // 把cart包装成对象，键为id，值为selected,，用于CartContainer.vue初始化滑动按钮
        selectedObj: function(state) {
            var obj = {};
            state.cart.forEach(item => {
                obj[item.id] = item.selected;
            })
            return obj;
        },
        // 底部卡片-获取总勾选商品数量
        selectedCount: function(state) {
            let totalCount = 0;
            state.cart.forEach(item => {
                if (item.selected) {
                    totalCount += item.count;
                }
            })
            return totalCount;
        },
        // 底部卡片-获取总价
        selectedAmount: function(state) {
            let totalPrice = 0;
            state.cart.forEach(item => {
                if (item.selected) {
                    totalPrice += (item.count * item.price);
                }
            })
            return totalPrice;
        }
    },
})

export default store